#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=100005;
ll t,n,m,L,V,d[maxn],v[maxn],a[maxn],p[maxn],ans1[21],ans2[21];
int qread(){
    int x=0,f=1,c=getchar();
    for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
    for(;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(c^48);
    return x*f;
}
vector<int>num[maxn];
void check(ll x,ll y,ll z,ll num,ll tim){

      for(int i=1;i<=m;i++){
          if(x>=p[i]){
            if(2*z*(x-p[i])+y*y>V*V){
                ans1[tim]++;
                a[num]++;
                break ;
            }
          }
      }
}
int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    t=qread();
    for(int i=1;i<=t;i++){
        n=qread();m=qread();L=qread();V=qread();
        for(int j=1;j<n;j++){
            d[i]=qread();
            v[i]=qread();
            v[i]=v[i];
            a[i]=qread();
        }
        for(int j=1;j<=m;j++) p[i]=qread();
        for(int k=1;k<=n;k++)check(d[k],v[k],a[k],k,t);
        for(int arr=1;arr<=n;arr++)if(a[arr]==0) ans2[t]++;
     }
     for(int i=1;i<=t;i++)printf("%lld %lld",ans1[i],ans2[i]);
     return 0;
}
